package org.jeecg.modules.demo.com.kunpeng.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.jeecg.modules.demo.com.kunpeng.entity.Project;
import com.baomidou.mybatisplus.extension.service.IService;
import org.jeecg.modules.demo.com.kunpeng.entity.ProjectDetailsInsert;
import org.jeecg.modules.demo.com.kunpeng.entity.dto.ProjectListQueryDTO;
import org.jeecg.modules.demo.com.kunpeng.vo.*;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Collection;
import java.util.List;

/**
 * @Description: 项目表
 * @Author: jeecg-boot
 * @Date:   2022-12-03
 * @Version: V1.0
 */
public interface IProjectService extends IService<Project> {


	/**
	 * 添加一对多
	 *
	 * @param project
	 * @param projectDetailsList
	 */
	public void saveMain(Project project,List<ProjectDetailsInsert> projectDetailsList) ;
	
	/**
	 * 修改一对多
	 *
   * @param project
   * @param projectDetailsList
	 */
	public void updateMain(Project project,List<ProjectDetailsInsert> projectDetailsList);
	
	/**
	 * 删除一对多
	 *
	 * @param id
	 */
	public void delMain (String id);
	
	/**
	 * 批量删除一对多
	 *
	 * @param idList
	 */
	public void delBatchMain (Collection<? extends Serializable> idList);

	/**
	 * 根据关键字查询项目列表
	 * @param page
	 * @return
	 */
	Page<ProjectListQueryVO> listByKeyWords(Page<ProjectListQueryVO> page, ProjectListQueryDTO projectListQueryDTO);

	/**
	 * 根据项目id查询项目详情
	 * @param projectId
	 * @return
	 */
	ProjectStandardVO selectByProjectId(String projectId);


	/**
	 * 获取客户列表
	 * @return
	 */
	List<CustomerInNameListVO> customerList();

	/**
	 * 根据项目id查询项目详情表起始时间
	 * @param projectId
	 * @return
	 */
	List<ProjectDateReturn> selectProjectDetailsDate(String projectId);

	/**
	 * 根据项目id获取项目名称
	 * @param projectId
	 * @return
	 */
	String selectProjectNameByProjectId(String projectId);


	/**
	 * 根据项目id修改项目回款状态
	 * @param projectId
	 * @return
	 */
	void updateReturnMoneyStatus(String projectId,String returnMoneyStatus);

	/**
	 * 根据项目id查询项目起止时间
	 * @param id
	 * @return
	 */
	List<DateRange> projectStartEndTime(String id);

	/**
	 * 根据项目编号模糊查询
	 */
	Integer listProjectIdByPrefix(String prefix);

	/**
	 * 根据客户名称获取项目名称和编号
	 */
	List<ProjectVO> listProjectByCustomerName(String customerName);

	/**
	 * 根据项目名称获取项目详情
	 * @param projectName
	 * @return
	 */
	List<String> listProjectPhaseByMainId(String projectName);

	/**
	 * 根据id修改已回款金额
	 */
	void updateAlreadyReturnMoney(String id, BigDecimal alreadyReturnMoney);
}
